package quantum;

/**
 * Autor: Chadan
 */
public class Plano {

    ACargas cargas;
    Punto puntoP;
    Vector2 distancia;
    double magDist;
    double angEx;
    Vector2 campoElcRes;
    final double Epsilon0 = 0.0000000000088541878176;
    int maxHor;
    int minHor;
    int maxVer;
    int minVer;
    
    
    Plano(){
        cargas = new ACargas();
        puntoP = new Punto();
        maxHor = 500;
        maxVer = 500;
        minVer = -500;
        minHor = -500;
    }
    
    void anadeCarga(Carga dato){
        cargas.anade(dato);
    }

    void eliminaCarga(int indice){
        cargas.elimina(indice);
    }

    void eliminaTodasCargas(){
        while(cargas.nCargas > 0){
            cargas.elimina(cargas.nCargas);
        }
    }

    int pot(int cuantos){
        int reg = 1;
        for(int i = 1; i <= cuantos; i ++){
            reg *= 10;
        }
        return reg;
    }

    float abs(float a){
        if(a < 0)
            return -a;
        return a;
    }

    void calculaCampoResultante(){
        campoElcRes = new Vector2();
        for(int i = 1; i<=cargas.nCargas; i++){
            distancia = new Vector2(puntoP, cargas.cargas[i]);
            magDist = distancia.magnitud();
            campoElcRes.X+= ((1/(4*Math.PI*Epsilon0))*((cargas.cargas[i].magnitud*(puntoP.X - cargas.cargas[i].X))/(magDist*magDist*magDist)));
            campoElcRes.Y+= ((1/(4*Math.PI*Epsilon0))*((cargas.cargas[i].magnitud*(puntoP.Y - cargas.cargas[i].Y))/(magDist*magDist*magDist)));
        }
        campoElcRes.Xi = puntoP.X;
        campoElcRes.Yi = puntoP.Y;
        calculaAnguloRespectoEjeX();
    }
    
    void calculaAnguloRespectoEjeX(){
        if(campoElcRes.X == 0){
            angEx = (90f);
        }else{
            angEx = campoElcRes.Y/(campoElcRes.X * -1);
            angEx = Math.toDegrees(Math.atan(angEx));
        }
        if(angEx < 0){
            angEx += 180;
        }
    }
    
}
